package com.lam.common.base.controller;

import java.text.MessageFormat;
import java.util.List;

import com.lam.common.base.domain.Result;
import com.lam.common.base.page.TableData;
import com.lam.common.base.page.TableHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * web通用Controller数据处理
 * 
 * @author lam
 */
public abstract class BaseController {

	protected final Logger logger = LoggerFactory.getLogger(getClass());

	/**
	 * 设置请求分页数据和排序字段(排序的数据库字段由Java属性字段驼峰转下划线而来)
	 */
	protected void startPage() {
		TableHelper.startPage(null);
	}

	/**
	 * 设置请求分页数据和排序字段(排序数据库字段根据实体类的Java属性查找对应的数据库字段)
	 * 
	 * @param entityClass
	 */
	protected void startPage(Class<?> entityClass) {
		TableHelper.startPage(entityClass);
	}

	/**
	 * 设置请求排序字段(排序的数据库字段由Java属性字段驼峰转下划线而来)
	 */
	protected void withOrderBy() {
		TableHelper.withOrderBy(null);
	}

	/**
	 * 设置请求排序字段(排序数据库字段根据实体类的Java属性查找对应的数据库字段)
	 * 
	 * @param entityClass
	 */
	protected void withOrderBy(Class<?> entityClass) {
		TableHelper.withOrderBy(entityClass);
	}
	
	/**
	 * 设置排序信号，接下来的第一个SQL查询会进行排序(正序排序)
	 * @param orderByColumn 数据库字段名称
	 */
	public static void orderByColumn(String orderByColumn) {
		TableHelper.orderByColumn(orderByColumn, null);
	}
	
	/**
	 * 设置排序信号，接下来的第一个SQL查询会进行排序
	 * @param orderByColumn 数据库字段名称
	 * @param orderDirec 排序方向，为null则正序
	 */
	public static void orderByColumn(String orderByColumn, String orderDirec) {
		TableHelper.orderByColumn(orderByColumn, orderDirec);
	}

	/**
	 * 响应请求分页数据
	 */
	protected TableData getTableData(List<?> list) {
		return TableHelper.createTableData(list);
	}

	/**
	 * 响应返回结果
	 * 
	 * @param rows 影响行数
	 * @return 操作结果
	 */
	protected Result toAjax(int rows) {

		return rows > 0 ? Result.ok() : Result.fail("请求失败");
	}

	/**
	 * 页面跳转
	 */
	public String redirect(String url) {

		return MessageFormat.format("redirect:{0}", url);
	}
}
